/**
 * @file stack.h
 * @author your name (you@domain.com)
 * @brief stack
 * @version 0.1
 * @date 2023-08-07
 * 
 * @copyright Copyright (c) 2023
 * 
 */
#ifndef STACK_H
#define STACK_H

/******************************* Includes ********************************/
#include <stdio.h>
#include <stdlib.h>
#include "log.h"

#ifdef __cplusplus
extern "C"
{
#endif

/******************************* Macros ******************************/

#if 0
#define STACK_E(...)  printf(__VA_ARGS__)
#define STACK_I(...)  printf(__VA_ARGS__)
#define STACK_D(...)  printf(__VA_ARGS__)
#else
#define STACK_E   COMLOG_ERROR_LOG
#define STACK_I   COMLOG_INFO_LOG
#define STACK_D   COMLOG_DEBUG_LOG
#endif
/******************************* Typedef ******************************/
typedef struct stack{
    void *data;
    int top;
    int max_count;
} stack_t;
/******************************* Variables ******************************/

/******************************* Functions ******************************/

stack_t *stack_create(int max_count);

void stack_destory(stack_t *stack);

int stack_is_empty(stack_t *stack);

int stack_is_full(stack_t *stack);

void stack_push(stack_t *stack, void *data);

void *stack_pop(stack_t *stack);

void *stack_peek(stack_t *stack);

void stack_clear_all(stack_t *stack);

#ifdef __cplusplus
}
#endif

#endif
/******************************* End of file ******************************/